#-*- codeing = utf-8 -*-
#@Time : 2020/11/26 14:53
#@Author : 阳某
#@File : 10.读写excel.py
#@Software : PyCharm


import xlrd

book = xlrd.open_workbook('./income.xlsx')
print(f'包含表单数量{book.nsheets}')
print(f'表单的名分别为{book.sheet_names()}')

# 表单索引从0开始，获取第一个表单对象
sheet = book.sheet_by_index(0)
# 获取名为2018的表单对象
book.sheet_by_name('2018')
# 获取所有的表单对象，放入一个列表返回
book.sheets()

sheet = book.sheet_by_index(0)
print(f"表单名：{sheet.name} ")
print(f"表单索引：{sheet.number}")
print(f"表单行数：{sheet.nrows}")
print(f"表单列数：{sheet.ncols}")
# 行号、列号都是从0开始计算
print(f"单元格A1内容是: {sheet.cell_value(rowx=0, colx=0)}")
# 行号、列号都是从0开始计算
print(f"第一行内容是: {sheet.row_values(rowx=0)}")
# 行号、列号都是从0开始计算
print(f"第一列内容是: {sheet.col_values(colx=0)}")

# 收入在第2列
incomes = sheet.col_values(colx=1,start_rowx=1)

print(f"2018年收入为: {sum(incomes)}")



# 那么我们怎么在汇总收入中，去掉包含星号的月份收入呢？
# 就需要我们查出哪些月份是带星号的，不要统计在内。

import xlrd
book = xlrd.open_workbook("income.xlsx")
sheet = book.sheet_by_name('2017')
# 收入在第2列
incomes = sheet.col_values(colx=1,start_rowx=1)
print(f"2017年账面收入为: {int(sum(incomes))}")
# 去掉包含星号的月份收入
toSubstract = 0
# 月份在第1列
monthes = sheet.col_values(colx=0)
print(monthes)
for row,month in enumerate(monthes):
    if type(month) is str and month.endswith('*'):
        income = sheet.cell_value(row,1)
        print(month,income)
        toSubstract += income
        # break
print(f"2017年真实收入为: {int(sum(incomes)- toSubstract)}")



import xlrd

book = xlrd.open_workbook("income.xlsx")

# 得到所有sheet对象
sheets = book.sheets()

incomeOf3years = 0
for sheet in sheets:
    # 收入在第2列
    incomes = sheet.col_values(colx=1,start_rowx=1)
    # 去掉包含星号的月份收入
    toSubstract = 0
    # 月份在第1列
    monthes = sheet.col_values(colx=0)

    for row,month in enumerate(monthes):
        if type(month) is str and month.endswith('*'):
            income = sheet.cell_value(row,1)
            print(month,income)
            toSubstract += income

    actualIncome = int(sum(incomes)- toSubstract)
    print(f"{sheet.name}年真实收入为: {actualIncome}")
    incomeOf3years += actualIncome

print(f'全部收入为{incomeOf3years}')